package org.tool.core.lang.convert;

/**
 * {@link org.tool.core.lang.convert.ConvertUtil} 所支持注入的转换器必须继承的父类
 *
 * @author 李坤
 * @date 2022/7/10 16:25
 */
public abstract class Converter<T> {

    /**
     * 将给定的对象 {@code S} 转换为 {@code T} 类型的对象
     *
     * @param source 要转换的对象
     *
     * @return 转换后的对象
     */
    public abstract T convert(Object source) throws Exception;

    /**
     * 将给定的对象 {@code S} 转换为 {@code T} 类型的对象
     * <p>
     * 如果转换时出现异常，则返回默认值 {@code defaultValue}
     *
     * @param source       要转换的对象
     * @param defaultValue 默认值
     *
     * @return 转换后的对象
     */
    public T convertIgnoreException(Object source, T defaultValue) {
        try {
            return convert(source);
        } catch (Exception e) {
            return defaultValue;
        }
    }

}
